// #include <stdio.h>

// int main()
// {
//         FILE* fp = fopen("log.txt", "r");

//         if (fp == NULL){
//             return 1;
//         }
//         return 0;
// }

// #include <stdio.h>
// #include <string.h>

// int main()
// {
//         for (int i = 0; i < 150; i++)
//         {
//                 printf("%d->%s\n", i, strerror(i));
//         }

//         return 0;
// }

// #include <stdio.h>
// #include <stdlib.h>

// void fun()
// {
//     printf("fun begin!");
//     _exit(40);
//     printf("fun end!");
// }

// int main()
// {
//     fun();
//     printf("main!");

//     return 0;
// }

// #include <stdio.h>
// #include <stdlib.h>

// int main()
// {
//     printf("hello world!");
//     exit(40);

//     return 0;
// }

// #include <stdio.h>
// #include <string.h>
// #include <stdlib.h>
// #include <unistd.h>
// #include <sys/types.h>
// #include <sys/wait.h>
// int main()
// {
//         pid_t id = fork();
//         if (id == 0)
//         {
//                 int cnt = 5;
//                 while (cnt)
//                 {
//                         printf("我是子进程，pid: %d, ppid: %d\n", getpid(), getppid());
//                         sleep(1);
//                         cnt--;
//                 }
//                 exit(0);
//         }
//         sleep(10);
//         pid_t rid = wait(NULL);
//         if (rid > 0)
//         {
//                 printf("wait success, rid: %d\n", rid); // rid为成功等待的子进程的pid
//         }
//         sleep(10);
//         return 0;
// }



// #include <stdio.h>
// #include <string.h>
// #include <stdlib.h>
// #include <unistd.h>
// #include <sys/types.h>
// #include <sys/wait.h>
// #include <errno.h>

// #include <stdio.h>
// #include <string.h>
// #include <stdlib.h>
// #include <unistd.h>
// #include <sys/types.h>
// #include <sys/wait.h>
// #include <errno.h>
// int main()
// {
//         pid_t id = fork();
//         if (id == 0)
//         {
//                 int cnt = 5;
//                 while(cnt)
//                 {
//                         printf("我是子进程，pid: %d, ppid: %d\n", getpid(), getppid());
//                         sleep(1);
//                         cnt--;
//                 }
//                 exit(40);
//         }
//         int status = 0;
//         pid_t rid = waitpid(id, &status, 0);
//         if (rid > 0)
//         {
//                 printf("wait success, rid: %d, status: %d\n", rid, status);
//         }
//         else
//         {
//                 printf("wait failed: %d: %s\n", errno, strerror(errno));
//         }
//         return 0;
// }



// #include <stdio.h>
// #include <string.h>
// #include <stdlib.h>
// #include <unistd.h>
// #include <sys/types.h>
// #include <sys/wait.h>
// #include <errno.h>

// int main()
// {
//         pid_t id=fork();
//         if(id==0)
//         {
//                 int cnt=5;
//                 while(cnt){
//                         printf("我是子进程，pid: %d, ppid: %d\n", getpid(), getppid());
//                         sleep(1);
//                         cnt--;
//                 }
//                 exit(40);
//         }
//         int status=0;
//         pid_t rid =waitpid(id,&status,0);
//         if (rid > 0)
//         {
//                 printf("wait success, rid: %d, exit code: %d\n", rid, (status>>8)&0xFF);        
//         }
//         else
//         {
//                 printf("wait failed: %d: %s\n", errno, strerror(errno));
//         }
//         return 0;
// }






// #include <stdio.h>
// #include <string.h>
// #include <stdlib.h>
// #include <unistd.h>
// #include <sys/types.h>
// #include <sys/wait.h>
// #include <errno.h>


// void handler(int signumber)
// {
//     //std::cout << "我是: " << getpid() << ", 我获得了一个信号: " << signumber <<std::endl;
//     raise(9);
// }


// int main()
// {
//         signal(SIGINT,handler); //自定义信号处理 Ctrl+c
//         pid_t id = fork();
//         if (id == 0)
//         {
//                 //int cnt = 5;
//                 while(1)
//                 {
//                         printf("我是子进程，pid: %d, ppid: %d\n", getpid(), getppid());
//                         sleep(1);
//                         //cnt--;
//                 }
//                 exit(40);
//         }
//         int status = 0;
//         pid_t rid = waitpid(id, &status, 0);
//         if (rid > 0)
//         {
//                 printf("wait success, rid: %d, exit code: %d, exit signal: %d\n", rid, (status>>8)&0xFF, status&0x7F);  //rid为成功等待的子进程的pid
//         }
//         else
//         {
//                 printf("wait failed: %d: %s\n", errno, strerror(errno));
//         }
//         return 0;
// }





// #include <stdio.h>
// #include <string.h>
// #include <stdlib.h>
// #include <unistd.h>
// #include <sys/types.h>
// #include <sys/wait.h>
// #include <errno.h>
 
// typedef void (*func_t) ();
 
// #define NUM 5
// func_t handlers[NUM + 1];
 
// //如下是各个功能函数
// void Download()
// {
//         printf("我是一个下载任务...\n");
// }
// void Flush()
// {
//         printf("我是一个刷新任务...\n");
// }
// void Log()
// {
//         printf("我是一个记录日志的任务...\n");
// }
 
// //注册函数，将需要各种功能函数写入到上述函数指针数组中
// void registerHandler(func_t h[], func_t f)
// {
//         int i = 0;
//         for (; i < NUM; i++)
//         {
//                 if (h[i] == NULL) break;
//         }
//         //指针数组满了
//         if (i == NUM) return;
//         h[i] = f;
//         h[++i] = NULL;
// }
// int main()
// {
//         registerHandler(handlers, Download);
//         registerHandler(handlers, Flush);
//         registerHandler(handlers, Log);
//         pid_t id = fork();
//         if (id == 0)
//         {
//                 while(1)
//                 {
//                         printf("我是子进程，pid: %d, ppid: %d\n", getpid(), getppid());
//                         sleep(3);
//                 }
//                 exit(10);
//         }
 
//         //父进程
//         while(1)
//         {
//                 int status = 0;
//                 pid_t rid = waitpid(id, &status, WNOHANG);
//                 if (rid > 0)
//                 {
//                         printf("wait success, rid: %d, exit code: %d, exit signal: %d\n", rid, (status>>8)&0xFF, status&0x7F);
//                         break;
//                 }
//                 else if (rid == 0)
//                 {
//                         //函数指针进行回调
//                         int i = 0;
//                         for (; handlers[i]; i++)
//                         {
//                                 handlers[i]();
//                         }
//                         printf("本轮调用结束，子进程没有退出\n");
//                         sleep(1);
//                 }
//                 else
//                 {
//                         printf("等待失败\n");
//                         break;
//                 }
//         }
//         return 0;
// }




// #include <stdio.h>
// #include <unistd.h>
 
// int main()
// {
//         printf("我的程序要运行了!\n");
//         execl("/usr/bin/ls", "ls", "-l", "-a", NULL);
//         printf("我的程序运行完毕!\n");
//         return 0;
// }


// #include <sys/types.h>
// #include <sys/wait.h>
// #include <stdlib.h>
// #include <stdio.h>
// #include <unistd.h>
 
// int main()
// {
//         printf("我的程序要运行了！\n");
//         if (fork() == 0)
//         {
//                 sleep(1);
//                 execl("/usr/bin/ls", "ls", "-al", NULL);
//                 exit(1);
//         }
 
//         waitpid(-1, NULL, 0);
//         printf("我的程序运行完毕！\n");
//         return 0;
// }



// #include <sys/types.h>
// #include <sys/wait.h>
// #include <stdlib.h>
// #include <stdio.h>
// #include <unistd.h>
 
// int main()
// {
//         printf("我的程序要运行了！\n");
//         if (fork() == 0)
//         {
//                 sleep(1);
//                 execlp("ls", "ls", "-al", NULL);
//                 exit(1);
//         }
 
//         waitpid(-1, NULL, 0);
//         printf("我的程序运行完毕！\n");
//         return 0;
// }


// #include <sys/types.h>
// #include <sys/wait.h>
// #include <stdlib.h>
// #include <stdio.h>
// #include <unistd.h>
 
// char *const argv[] = {
//         (char*const)"ls",
//         (char*const)"-a",
//         (char*const)"-l",
//         NULL
// };
 
// int main()
// {
//         printf("我的程序要运行了！\n");
//         if (fork() == 0)
//         {
//                 sleep(1);
//                 execv("/usr/bin/ls", argv);
//                 exit(1);
//         }
 
//         waitpid(-1, NULL, 0);
//         printf("我的程序运行完毕！\n");
//         return 0;
// }



// #include <sys/types.h>
// #include <sys/wait.h>
// #include <stdlib.h>
// #include <stdio.h>
// #include <unistd.h>
 
// char *const argv[] = {
//         (char*const)"ls",
//         (char*const)"-a",
//         (char*const)"-l",
//         NULL
// };
 
// char*const env[] = {
//         "MYVAL1=1234567",
//         "MYVAL2=6666666",
//         NULL
// };
 
// int main()
// {
//         printf("我的程序要运行了！\n");
//         if (fork() == 0)
//         {
//                 sleep(1);
//                 execvp("./other", argv);
//                 exit(1);
//         }
 
//         waitpid(-1, NULL, 0);
//         printf("我的程序运行完毕！\n");
//         return 0;
// }


#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
 
 
char*const env[] = {
        "MYVAL1=1234567",
        "MYVAL2=6666666",
        NULL
};
 
int main()
{
        printf("我的程序要运行了！\n");
        if (fork() == 0)
        {
                sleep(1);
                execle("./other", "other", "-a", "-b", NULL, env);
                exit(1);
        }
 
        waitpid(-1, NULL, 0);
        printf("我的程序运行完毕！\n");
        return 0;
}